package com.bootdo.order.utils;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * @program: bootdo
 * @packageName: com.bootdo.order.utils
 * @className: DoubleUtils
 * @description: Double精度运算
 * @create: 2020-02-23 23:34
 */
public class DoubleUtils {

    /**
     * 保留两位小数
     *
     * @param values
     * @return
     */
    public static double format2(double values) {
        return new BigDecimal(Double.toString(values)).setScale(2, RoundingMode.HALF_UP).doubleValue();
    }


    /**
     *
     * @param values
     *            乘数
     * @param values2
     *            被乘数
     * @param digit
     *            保留位数
     * @return
     */
    public static double multiplication(double values, double values2, int digit) {
        BigDecimal b1 = BigDecimal.valueOf(values);
        BigDecimal b2 = BigDecimal.valueOf(values2);
        return b1.multiply(b2).setScale(digit, RoundingMode.HALF_UP).doubleValue();
    }


    /**
     * 相加
     *
     * @param d1
     * @param d2
     * @return
     */
    public static double sum(double d1, double d2) {
        BigDecimal b1 = BigDecimal.valueOf(d1);
        BigDecimal b2 = BigDecimal.valueOf(d2);
        return b1.add(b2).setScale(2, RoundingMode.HALF_UP).doubleValue();
    }


    /**
     * 相减
     *
     * @param d1
     * @param d2
     * @return
     */
    public static double sub(double d1, double d2) {
        BigDecimal b1 = BigDecimal.valueOf(d1);
        BigDecimal b2 = BigDecimal.valueOf(d2);
        return b1.subtract(b2).setScale(2, RoundingMode.HALF_UP).doubleValue();
    }


    /**
     * 相除
     *
     * @param d1
     *            除数
     * @param d2
     *            被除数
     * @return
     */
    public static double divide(double d1, double d2) {
        if ("0".equals(d1) || "0".equals(d2)) {
            return 0d;
        }
        BigDecimal b1 = BigDecimal.valueOf(d1);
        BigDecimal b2 = BigDecimal.valueOf(d2);
        return new Double(b1.divide(b2, 2, BigDecimal.ROUND_HALF_UP).doubleValue());
    }
}
